/*
 * Usuarios.java
 *
 * Created on Oct 31, 2008, 6:41:37 PM
 */
package wasolicitudesfiec.Administracion.Usuarios;

import com.sun.rave.web.ui.appbase.AbstractPageBean;
import com.sun.rave.web.ui.component.Alert;
import com.sun.rave.web.ui.component.TableRowGroup;
import com.sun.rave.web.ui.model.DefaultTableDataProvider;
import entidad.Persona;
import entidad.Usuario;
import java.sql.SQLException;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.FacesException;
import javax.faces.application.FacesMessage;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import wasolicitudesfiec.Administracion.Usuarios.dataproviders.UsuarioDataProvider;
import wasolicitudesfiec.SessionBean1;
import wasolicitudesfiec.RequestBean1;
import wasolicitudesfiec.ApplicationBean1;
import wasolicitudesfiec.Menu;
import wasolicitudesfiec.authentication.AuthenticationPhaseListener;
import wasolicitudesfiec.logicacontrol.CTRL_Base;
import wasolicitudesfiec.logicacontrol.Logica;
import web.util.Constantes;
import web.util.ManejadorCookies;

/**
 * <p>Page bean that corresponds to a similarly named JSP page.  This
 * class contains component definitions (and initialization code) for
 * all components that you have defined on this page, as well as
 * lifecycle methods and event handlers where you may add behavior
 * to respond to incoming events.</p>
 *
 * @author kabad
 */
public class Usuarios extends AbstractPageBean {
	// <editor-fold defaultstate="collapsed" desc="Managed Component Definition">

	private UsuarioDataProvider usuarioDataProvider = new UsuarioDataProvider();
	private HttpServletResponse response;
	private HttpServletRequest request;

	/**
	 * @return the usuarioDataProvider
	 */
	public UsuarioDataProvider getUsuarioDataProvider() {
		return usuarioDataProvider;
	}

	/**
	 * @param usuarioDataProvider the usuarioDataProvider to set
	 */
	public void setUsuarioDataProvider(UsuarioDataProvider usuarioDataProvider) {
		this.usuarioDataProvider = usuarioDataProvider;
	}

	/**
	 * <p>Automatically managed component initialization.  <strong>WARNING:</strong>
	 * This method is automatically generated, so any user-specified code inserted
	 * here is subject to being replaced.</p>
	 */
	private void _init() throws Exception {
	}
	private TableRowGroup tableRowGroup1 = new TableRowGroup();

	public TableRowGroup getTableRowGroup1() {
		return tableRowGroup1;
	}

	public void setTableRowGroup1(TableRowGroup trg) {
		this.tableRowGroup1 = trg;
	}
	private Alert alert1 = new Alert();

	public Alert getAlert1() {
		return alert1;
	}

	public void setAlert1(Alert a) {
		this.alert1 = a;
	}

	// </editor-fold>
	/**
	 * <p>Construct a new Page bean instance.</p>
	 */
	public Usuarios() {
	}

	/**
	 * <p>Callback method that is called whenever a page is navigated to,
	 * either directly via a URL, or indirectly via page navigation.
	 * Customize this method to acquire resources that will be needed
	 * for event handlers and lifecycle methods, whether or not this
	 * page is performing post back processing.</p>
	 *
	 * <p>Note that, if the current request is a postback, the property
	 * values of the components do <strong>not</strong> represent any
	 * values submitted with this request.  Instead, they represent the
	 * property values that were saved for this view when it was rendered.</p>
	 */
	@Override
	public void init() {
		// Perform initializations inherited from our superclass
		super.init();
		// Perform application initialization that must complete
		// *before* managed components are initialized
		// TODO - add your own initialiation code here

		// <editor-fold defaultstate="collapsed" desc="Managed Component Initialization">
		// Initialize automatically managed components
		// *Note* - this logic should NOT be modified
		try {
			_init();
		} catch (Exception e) {
			log("Usuarios Initialization Failure", e);
			throw e instanceof FacesException ? (FacesException) e : new FacesException(e);
		}

		// </editor-fold>
		// Perform application initialization that must complete
		// *after* managed components are initialized
         Usuario usuario = (Usuario) getSessionMap().get(AuthenticationPhaseListener.USER_SESSION_KEY);
        Logica logica = new Logica();
        FacesMessage message;
        String nombreRol = Constantes.Rol.Administrador.getNombreEnBD();
        try {
            Persona persona = logica.leerPersonaPorUsuario(usuario.getUsuario());
            if (!logica.isUsuarioMiembrodeRol(persona.getIdPersona(), nombreRol)) {
                CTRL_Base ctrl = new CTRL_Base(this.getFacesContext());
                ctrl.addCookieMensaje(Constantes.Mensajes.noAdministrador, null);
                ctrl.redireccionar("/WA_SolicitudesFIEC/faces/general/Mensaje.jsp");
            }

        } catch (SQLException ex) {
            Logger.getLogger(Usuarios.class.getName()).log(Level.SEVERE, null, ex);
            message = new FacesMessage(FacesMessage.SEVERITY_FATAL, ex.getMessage(), "");
            getFacesContext().addMessage(null, message);
        }
		getMenu().setTitulo("Usuarios");
		response = (HttpServletResponse) getFacesContext().getExternalContext().getResponse();
		request = (HttpServletRequest) this.getFacesContext().getExternalContext().getRequest();


		Cookie mensaje = ManejadorCookies.leerCookieMensaje(request);
		if (mensaje != null) {
			getAlert1().setSummary(mensaje.getValue());
			getAlert1().setVisible(true);
			ManejadorCookies.borrarCookie(response, mensaje);
		} else {
			getAlert1().setVisible(false);
		}
	}

	/**
	 * <p>Callback method that is called after the component tree has been
	 * restored, but before any event processing takes place.  This method
	 * will <strong>only</strong> be called on a postback request that
	 * is processing a form submit.  Customize this method to allocate
	 * resources that will be required in your event handlers.</p>
	 */
	@Override
	public void preprocess() {
	}

	/**
	 * <p>Callback method that is called just before rendering takes place.
	 * This method will <strong>only</strong> be called for the page that
	 * will actually be rendered (and not, for example, on a page that
	 * handled a postback and then navigated to a different page).  Customize
	 * this method to allocate resources that will be required for rendering
	 * this page.</p>
	 */
	@Override
	public void prerender() {
		Logica logica = new Logica();
		FacesMessage message;
		Vector<Persona> listaUsuarios;
		try {
			listaUsuarios = logica.buscarPersonaConRol("");
			getUsuarioDataProvider().setListaUsuarios(listaUsuarios);
		} catch (SQLException ex) {
			Logger.getLogger(Usuarios.class.getName()).log(Level.SEVERE, null, ex);
			message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Ocurrio un error en la busqueda de usuarios: " + ex.getMessage(), "");
			getFacesContext().addMessage(null, message);
		}
	}

	/**
	 * <p>Callback method that is called after rendering is completed for
	 * this request, if <code>init()</code> was called (regardless of whether
	 * or not this was the page that was actually rendered).  Customize this
	 * method to release resources acquired in the <code>init()</code>,
	 * <code>preprocess()</code>, or <code>prerender()</code> methods (or
	 * acquired during execution of an event handler).</p>
	 */
	@Override
	public void destroy() {
	}

	/**
	 * <p>Return a reference to the scoped data bean.</p>
	 *
	 * @return reference to the scoped data bean
	 */
	protected SessionBean1 getSessionBean1() {
		return (SessionBean1) getBean("SessionBean1");
	}

	/**
	 * <p>Return a reference to the scoped data bean.</p>
	 *
	 * @return reference to the scoped data bean
	 */
	protected RequestBean1 getRequestBean1() {
		return (RequestBean1) getBean("RequestBean1");
	}

	/**
	 * <p>Return a reference to the scoped data bean.</p>
	 *
	 * @return reference to the scoped data bean
	 */
	protected ApplicationBean1 getApplicationBean1() {
		return (ApplicationBean1) getBean("ApplicationBean1");
	}

	public Menu getMenu() {
		return (Menu) getBean("SolicitudesFIEC$Menu");
	}
	public String button1_action() {
		// TODO: Process the button click action. Return value is a navigation
		// case name where null will return to the same page.
		return "mantenimientoUsuario";
	}
}

